//
//  Presenter.swift
//  IMFrame
//
//  Created by Author on 2023/9/21.
//

import Foundation
struct Presenter {
    var outPut:outputProtocol?
    private var actionDic:[String : ChatActionProtocol ] = Dictionary()
   private(set) var dataSource:[MessageModel] = []
    
    init(){
        registAction()
    }
    
    //MARK: 注册Action
    private mutating func registAction(){
        
        let  textActionKey = ViewController.cellIdentifier + "\(MessageModel.IMMessageType.text.rawValue)"
        actionDic[textActionKey] = ChatTextAction()
        
        let imgActionKey = ViewController.cellIdentifier + "\(MessageModel.IMMessageType.image.rawValue)"
        actionDic[imgActionKey] = ChatImageAction()
        
        let voiceActionKey = ViewController.cellIdentifier + "\(MessageModel.IMMessageType.voice.rawValue)"
        actionDic[voiceActionKey] = ChatVoiceAction()
        
    }
    
    
    
    
    mutating func loadData(){
        let textModel = TextMsgModel()
        textModel.messageId = 10001
        textModel.messageType = .text
        textModel.isShowTime = false
        textModel.title = "这是一个文字消息"
        
        let imgModel = ImageMsgModel()
        imgModel.messageId = 10002
        imgModel.messageType = .image
        imgModel.isShowTime = false
        imgModel.icon = "demo"
        
        
        let voiceModel = VoiceMsgModel()
        voiceModel.messageId = 10003
        voiceModel.messageType = .voice
        voiceModel.isShowTime = false
        voiceModel.url = ""
        
        let textModel1 = TextMsgModel()
        textModel1.messageId = 10004
        textModel1.messageType = .text
        textModel1.isShowTime = true
        textModel1.title = "这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息这是一个长文本的文字消息"
        
        self.dataSource = [textModel,imgModel,voiceModel,textModel1]
        self.outPut?.loadDataFinish()
    }
   
    func dispatchEvent(_ evenType:ChatEvenType, _ msgModel: MessageModel){
        let key = ViewController.cellIdentifier + "\(msgModel.messageType.rawValue)"
        if actionDic.keys.contains(key), let action:ChatActionProtocol = actionDic[key]{
            action.dispatchEvent(evenType, msgModel)
        }
    }
}

